<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>RegExFuns.java</title>
</head>
<body bgcolor="white">
<pre><tt><font color="#000000">01:</font> <i><font color="#9A1900">// EH-RegExFun/RegExFuns.java</font></i>
<font color="#000000">02:</font>  
<font color="#000000">03:</font> <b><font color="#000080">import</font></b> java<font color="#990000">.</font>io<font color="#990000">.</font>BufferedReader<font color="#990000">;</font>
<font color="#000000">04:</font> <b><font color="#000080">import</font></b> java<font color="#990000">.</font>io<font color="#990000">.</font>File<font color="#990000">;</font>
<font color="#000000">05:</font> <b><font color="#000080">import</font></b> java<font color="#990000">.</font>io<font color="#990000">.</font>FileReader<font color="#990000">;</font>
<font color="#000000">06:</font> <b><font color="#000080">import</font></b> java<font color="#990000">.</font>io<font color="#990000">.</font>IOException<font color="#990000">;</font>
<font color="#000000">07:</font> <b><font color="#000080">import</font></b> java<font color="#990000">.</font>util<font color="#990000">.</font>regex<font color="#990000">.</font>Matcher<font color="#990000">;</font>
<font color="#000000">08:</font> <b><font color="#000080">import</font></b> java<font color="#990000">.</font>util<font color="#990000">.</font>regex<font color="#990000">.</font>Pattern<font color="#990000">;</font>
<font color="#000000">09:</font> 
<font color="#000000">10:</font> <b><font color="#0000FF">public</font></b> <b><font color="#0000FF">class</font></b> <font color="#009900">RegExFuns</font> <font color="#FF0000">{</font>
<font color="#000000">11:</font>     <b><font color="#0000FF">public</font></b> <b><font color="#0000FF">static</font></b> <font color="#009900">void</font> <b><font color="#000000">main</font></b><font color="#990000">(</font>String<font color="#990000">[]</font> args<font color="#990000">)</font> <font color="#FF0000">{</font>
<font color="#000000">12:</font>         File file <font color="#990000">=</font> <b><font color="#0000FF">new</font></b> <b><font color="#000000">File</font></b><font color="#990000">(</font><font color="#FF0000">"RegExFuns.dat"</font><font color="#990000">);</font>
<font color="#000000">13:</font>         <b><font color="#0000FF">if</font></b> <font color="#990000">(!(</font>file<font color="#990000">.</font><b><font color="#000000">exists</font></b><font color="#990000">()</font>  <font color="#990000">&amp;&amp;</font> file<font color="#990000">.</font><b><font color="#000000">isFile</font></b><font color="#990000">()</font> <font color="#990000">&amp;&amp;</font>
<font color="#000000">14:</font>               file<font color="#990000">.</font><b><font color="#000000">canRead</font></b><font color="#990000">()))</font> <font color="#FF0000">{</font>
<font color="#000000">15:</font>             System<font color="#990000">.</font>out<font color="#990000">.</font><b><font color="#000000">println</font></b><font color="#990000">(</font><font color="#FF0000">"No such file: "</font> <font color="#990000">+</font>
<font color="#000000">16:</font>                                 file<font color="#990000">.</font><b><font color="#000000">getName</font></b><font color="#990000">());</font>
<font color="#000000">17:</font>             System<font color="#990000">.</font><b><font color="#000000">exit</font></b><font color="#990000">(</font><font color="#993399">1</font><font color="#990000">);</font>
<font color="#000000">18:</font>         <font color="#FF0000">}</font>
<font color="#000000">19:</font> 
<font color="#000000">20:</font>         <i><font color="#9A1900">// reading file into one string</font></i>
<font color="#000000">21:</font>         StringBuilder sb <font color="#990000">=</font> <b><font color="#0000FF">new</font></b> <b><font color="#000000">StringBuilder</font></b><font color="#990000">(</font><font color="#993399">2000</font><font color="#990000">);</font>
<font color="#000000">22:</font>         BufferedReader br <font color="#990000">=</font> <b><font color="#0000FF">null</font></b><font color="#990000">;</font>
<font color="#000000">23:</font>         <b><font color="#0000FF">try</font></b> <font color="#FF0000">{</font>
<font color="#000000">24:</font>             br <font color="#990000">=</font> <b><font color="#0000FF">new</font></b> <b><font color="#000000">BufferedReader</font></b><font color="#990000">(</font>
<font color="#000000">25:</font>                      <b><font color="#0000FF">new</font></b> <b><font color="#000000">FileReader</font></b><font color="#990000">(</font>file<font color="#990000">));</font>
<font color="#000000">26:</font>             String line<font color="#990000">;</font>
<font color="#000000">27:</font>             <b><font color="#0000FF">while</font></b> <font color="#990000">(</font> <font color="#990000">(</font>line <font color="#990000">=</font> br<font color="#990000">.</font><b><font color="#000000">readLine</font></b><font color="#990000">())</font> <font color="#990000">!=</font> <b><font color="#0000FF">null</font></b><font color="#990000">)</font>
<font color="#000000">28:</font>                 sb<font color="#990000">.</font><b><font color="#000000">append</font></b><font color="#990000">(</font>line <font color="#990000">+</font> <font color="#FF0000">"</font><font color="#CC33CC">\n</font><font color="#FF0000">"</font><font color="#990000">);</font>
<font color="#000000">29:</font>             br<font color="#990000">.</font><b><font color="#000000">close</font></b><font color="#990000">();</font>
<font color="#000000">30:</font>         <font color="#FF0000">}</font> <b><font color="#0000FF">catch</font></b> <font color="#990000">(</font>IOException e<font color="#990000">)</font> <font color="#FF0000">{</font>
<font color="#000000">31:</font>             System<font color="#990000">.</font>out<font color="#990000">.</font><b><font color="#000000">println</font></b><font color="#990000">(</font><font color="#FF0000">"Troubles reading file"</font><font color="#990000">);</font>
<font color="#000000">32:</font>             e<font color="#990000">.</font><b><font color="#000000">printStackTrace</font></b><font color="#990000">();</font>
<font color="#000000">33:</font>             System<font color="#990000">.</font><b><font color="#000000">exit</font></b><font color="#990000">(</font><font color="#993399">1</font><font color="#990000">);</font>
<font color="#000000">34:</font>         <font color="#FF0000">}</font> <b><font color="#0000FF">finally</font></b> <font color="#FF0000">{</font>
<font color="#000000">35:</font>             <b><font color="#0000FF">if</font></b> <font color="#990000">(</font>br <font color="#990000">!=</font> <b><font color="#0000FF">null</font></b><font color="#990000">)</font> <font color="#FF0000">{</font>
<font color="#000000">36:</font>                 <b><font color="#0000FF">try</font></b> <font color="#FF0000">{</font>br<font color="#990000">.</font><b><font color="#000000">close</font></b><font color="#990000">();</font><font color="#FF0000">}</font>
<font color="#000000">37:</font>                 <b><font color="#0000FF">catch</font></b><font color="#990000">(</font>IOException ignore<font color="#990000">)</font> <font color="#FF0000">{</font> <font color="#FF0000">}</font>
<font color="#000000">38:</font>             <font color="#FF0000">}</font>
<font color="#000000">39:</font>         <font color="#FF0000">}</font>
<font color="#000000">40:</font>         String text <font color="#990000">=</font> sb<font color="#990000">.</font><b><font color="#000000">toString</font></b><font color="#990000">();</font>
<font color="#000000">41:</font> 
<font color="#000000">42:</font>         <i><font color="#9A1900">// removing '//' comments</font></i>
<font color="#000000">43:</font>         text <font color="#990000">=</font> text<font color="#990000">.</font><b><font color="#000000">replaceAll</font></b><font color="#990000">(</font><font color="#FF0000">"(?m)//.*$"</font><font color="#990000">,</font><font color="#FF0000">""</font><font color="#990000">);</font>
<font color="#000000">44:</font>         <i><font color="#9A1900">// removing '/* ... */' multiline comments</font></i>
<font color="#000000">45:</font>         text <font color="#990000">=</font> text<font color="#990000">.</font><b><font color="#000000">replaceAll</font></b><font color="#990000">(</font><font color="#FF0000">"(?ms)/</font><font color="#CC33CC">\\</font><font color="#FF0000">*.*?</font><font color="#CC33CC">\\</font><font color="#FF0000">*/"</font><font color="#990000">,</font><font color="#FF0000">" "</font><font color="#990000">);</font>
<font color="#000000">46:</font> 
<font color="#000000">47:</font>         <i><font color="#9A1900">// pattern of identifier</font></i>
<font color="#000000">48:</font>         String id <font color="#990000">=</font> <font color="#FF0000">"</font><font color="#CC33CC">\\</font><font color="#FF0000">b[a-zA-Z_][</font><font color="#CC33CC">\\</font><font color="#FF0000">w]*"</font><font color="#990000">;</font>
<font color="#000000">49:</font>         <i><font color="#9A1900">// pattern of declaration ('int k'</font></i>
<font color="#000000">50:</font>         <i><font color="#9A1900">// or 'java.lang.String[] s' etc.)</font></i>
<font color="#000000">51:</font>         String de <font color="#990000">=</font> <font color="#FF0000">"ID(</font><font color="#CC33CC">\\</font><font color="#FF0000">.ID)*(</font><font color="#CC33CC">\\</font><font color="#FF0000">s*</font><font color="#CC33CC">\\</font><font color="#FF0000">[</font><font color="#CC33CC">\\</font><font color="#FF0000">s*</font><font color="#CC33CC">\\</font><font color="#FF0000">])?</font><font color="#CC33CC">\\</font><font color="#FF0000">s+ID"</font><font color="#990000">.</font>
<font color="#000000">52:</font>                     <b><font color="#000000">replace</font></b><font color="#990000">(</font><font color="#FF0000">"ID"</font><font color="#990000">,</font>id<font color="#990000">);</font>
<font color="#000000">53:</font> 
<font color="#000000">54:</font>         <i><font color="#9A1900">// pattern of function declaration</font></i>
<font color="#000000">55:</font>         String patString <font color="#990000">=</font>
<font color="#000000">56:</font>             <font color="#990000">(</font><font color="#FF0000">"^</font><font color="#CC33CC">\\</font><font color="#FF0000">s*(ID</font><font color="#CC33CC">\\</font><font color="#FF0000">s*)+"</font> <font color="#990000">+</font>
<font color="#000000">57:</font>              <font color="#FF0000">"</font><font color="#CC33CC">\\</font><font color="#FF0000">("</font> <font color="#990000">+</font>
<font color="#000000">58:</font>              <font color="#FF0000">"(</font><font color="#CC33CC">\\</font><font color="#FF0000">s*|"</font> <font color="#990000">+</font>
<font color="#000000">59:</font>              <font color="#FF0000">"</font><font color="#CC33CC">\\</font><font color="#FF0000">s*DE(</font><font color="#CC33CC">\\</font><font color="#FF0000">s*,</font><font color="#CC33CC">\\</font><font color="#FF0000">s*DE</font><font color="#CC33CC">\\</font><font color="#FF0000">s*)*</font><font color="#CC33CC">\\</font><font color="#FF0000">s*)"</font> <font color="#990000">+</font>
<font color="#000000">60:</font>              <font color="#FF0000">"</font><font color="#CC33CC">\\</font><font color="#FF0000">)"</font><font color="#990000">).</font><b><font color="#000000">replace</font></b><font color="#990000">(</font><font color="#FF0000">"ID"</font><font color="#990000">,</font>id<font color="#990000">).</font><b><font color="#000000">replace</font></b><font color="#990000">(</font><font color="#FF0000">"DE"</font><font color="#990000">,</font>de<font color="#990000">);</font>
<font color="#000000">61:</font> 
<font color="#000000">62:</font>         Matcher mtext <font color="#990000">=</font>
<font color="#000000">63:</font>             Pattern<font color="#990000">.</font><b><font color="#000000">compile</font></b><font color="#990000">(</font>patString<font color="#990000">,</font>
<font color="#000000">64:</font>                 Pattern<font color="#990000">.</font>MULTILINE <font color="#990000">|</font> Pattern<font color="#990000">.</font>DOTALL<font color="#990000">).</font>
<font color="#000000">65:</font>                 <b><font color="#000000">matcher</font></b><font color="#990000">(</font>text<font color="#990000">);</font>
<font color="#000000">66:</font> 
<font color="#000000">67:</font>         <i><font color="#9A1900">// with this we will replace sequences of</font></i>
<font color="#000000">68:</font>         <i><font color="#9A1900">// white chars with exactly one space</font></i>
<font color="#000000">69:</font>         Matcher mspac <font color="#990000">=</font>
<font color="#000000">70:</font>             Pattern<font color="#990000">.</font><b><font color="#000000">compile</font></b><font color="#990000">(</font><font color="#FF0000">"</font><font color="#CC33CC">\\</font><font color="#FF0000">s+"</font><font color="#990000">,</font>
<font color="#000000">71:</font>                 Pattern<font color="#990000">.</font>MULTILINE <font color="#990000">|</font> Pattern<font color="#990000">.</font>MULTILINE<font color="#990000">).</font>
<font color="#000000">72:</font>                 <b><font color="#000000">matcher</font></b><font color="#990000">(</font><font color="#FF0000">""</font><font color="#990000">);</font>
<font color="#000000">73:</font> 
<font color="#000000">74:</font>         <font color="#009900">boolean</font> found <font color="#990000">=</font> mtext<font color="#990000">.</font><b><font color="#000000">find</font></b><font color="#990000">();</font>
<font color="#000000">75:</font>         <b><font color="#0000FF">while</font></b> <font color="#990000">(</font>found<font color="#990000">)</font> <font color="#FF0000">{</font>
<font color="#000000">76:</font>             String g <font color="#990000">=</font> mtext<font color="#990000">.</font><b><font color="#000000">group</font></b><font color="#990000">();</font>
<font color="#000000">77:</font>             g <font color="#990000">=</font> mspac<font color="#990000">.</font><b><font color="#000000">reset</font></b><font color="#990000">(</font>g<font color="#990000">).</font><b><font color="#000000">replaceAll</font></b><font color="#990000">(</font><font color="#FF0000">" "</font><font color="#990000">);</font>
<font color="#000000">78:</font>             System<font color="#990000">.</font>out<font color="#990000">.</font><b><font color="#000000">println</font></b><font color="#990000">(</font>g<font color="#990000">.</font><b><font color="#000000">trim</font></b><font color="#990000">());</font>
<font color="#000000">79:</font> 
<font color="#000000">80:</font>             found <font color="#990000">=</font> mtext<font color="#990000">.</font><b><font color="#000000">find</font></b><font color="#990000">();</font>
<font color="#000000">81:</font>         <font color="#FF0000">}</font>
<font color="#000000">82:</font>     <font color="#FF0000">}</font>
<font color="#000000">83:</font> <font color="#FF0000">}</font></tt></pre>
</body>
</html>
